package com.bysj.sausys.service;

import com.bysj.sausys.beans.PageQuery;
import com.bysj.sausys.beans.PageResult;
import com.bysj.sausys.beans.SubmitTaskBean;
import com.bysj.sausys.common.JsonData;
import com.bysj.sausys.vo.CommentVo;
import com.bysj.sausys.vo.TaskVo;
import org.activiti.engine.task.Task;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * 工作流的service接口
 *
 * @author WangZK
 */
public interface ISysWorkFlowService {

    /**
     * 发布新的流程定义
     *
     * @param zipFile
     * @param path
     * @param processDefinitionName
     */
    void saveNewDeploy(MultipartFile zipFile, String path, String processDefinitionName);

    /**
     * 删除流程定义
     *
     * @param deploymentId
     * @return
     */
    void deleteProcessDefinitionByDeploymentId(String deploymentId);

    /**
     * 获取图片
     *
     * @param deploymentId
     * @param diagramResourceName
     * @return
     */
    InputStream findImageInputStream(String deploymentId, String diagramResourceName);

    /**
     * 获取部署信息
     *
     * @return
     */
    Map getDeployInfo();

    /**
     * 启动流程
     *
     * @param key
     * @param objId
     * @param username
     * @return
     */
    String saveStartProcess(String key, String objId, String username);

    /**
     * 获取任务列表
     *
     * @param pageQuery
     * @param username
     * @return
     */
    PageResult<TaskVo> findTaskListByUsername(PageQuery pageQuery, String username);

    /**
     * 根据任务id获取业务数据id
     *
     * @param taskId
     * @return
     */
    int getBusinessIdByTaskId(String taskId);

    /**
     * 获取连线信息
     *
     * @param taskId
     * @return
     */
    List<String> findOutComeListByTaskId(String taskId);

    /**
     * 获取批注信息，传递的是当前任务ID，获取历史任务ID对应的批注
     *
     * @param taskId
     * @return
     */
    List<CommentVo> findCommentByTaskId(String taskId);

    /**
     * 根据任务ID获取任务对象
     *
     * @param taskId 任务id
     * @return
     */
    Task findTaskById(String taskId);

    /**
     * 获取连线信息和历史审核人信息
     *
     * @param taskId
     * @return
     */
    Map getAuditInfo(String taskId);

    /**
     * 提交任务
     *
     * @param submitTaskBean
     * @param username
     * @param variables
     * @return
     */
    String saveSubmitTask(SubmitTaskBean submitTaskBean, String username, Map variables);

    /**
     * 根据任务id获取流程实例，判断流程是否已经结束，结束返回true，未结束返回false
     *
     * @param processInstanceId
     * @return
     */
    boolean checkProcessIsEnd(String processInstanceId);

    /**
     * 使用objId查询批注
     *
     * @param objId
     * @return
     */
    Map findCommentByObjId(String objId);

    /**
     * 查看当前活动，获取当前活动对应的坐标，将值放到Map中
     *
     * @param taskId
     * @return
     */
    Map<String, Object> findCoordingByTaskId(String taskId);

    /**
     * 获取当前图片的相关信息
     *
     * @param taskId
     * @param request
     * @return
     */
    Map<String, Object> getCurrentImageInfo(String taskId, HttpServletRequest request);
}
